package kaizen.nomweb;

import java.io.*;

import java.lang.reflect.Method;

import java.sql.ResultSetMetaData;
import java.sql.SQLException;

import java.text.*;

import java.util.*;

import javax.servlet.*;
import javax.servlet.http.*;

import kaizen.jdbc.*;

// Referenced classes of package kaizen.nomweb:
//            FunInsertEng, templates
public class utilerias extends HttpServlet {

    public utilerias() {
    }

    public static double aDecimal(String valor) {
        double val = 0.0D;
        try {
            val = Double.valueOf(valor).doubleValue();
        } catch (NumberFormatException _ex) {
            return 0.0D;
        }
        return val;
    }

    public static int aEntero(String valor) {
        int val = 0;
        try {
            val = Integer.valueOf(valor).intValue();
        } catch (NumberFormatException _ex) {
            return 0;
        }
        return val;
    }

    public static double aNumerico(String cadena) {
        double num = Double.valueOf(cadena).doubleValue();
        return num;
    }

    public static int aSmallInt(String cadena) {
        int num = Integer.valueOf(cadena).intValue();
        return num;
    }

    public static Date agregaDia(String sfecha, int i) throws IOException {
        Properties props = loadProperties("/kaizen/general.properties");
        String mascaraFecha = props.getProperty("mascaraFecha");
        SimpleDateFormat frm = new SimpleDateFormat(mascaraFecha);
        Calendar cal = new GregorianCalendar();
        Date dfecha = new Date();
        try {
            dfecha = frm.parse(sfecha);
        } catch (ParseException _ex) {
            return dfecha;
        }
        cal.setTime(dfecha);
        cal.add(5, i);
        dfecha = cal.getTime();
        return dfecha;
    }

    public static void borraContWinDir(String dir) {
        try {
            Process procesa = Runtime.getRuntime().exec(new String[]{"cmd", "/c", "del", dir + "*.*", "/Q"});
            DataInputStream in =
                    new DataInputStream(new BufferedInputStream(procesa.getInputStream()));
            String s;
            while ((s = in.readLine()) != null) {
                System.out.println(s);
            }
        } catch (IOException _ex) {
            System.out.println("Existio un error al crear el directorio: " + dir);
        }
    }

    public static boolean buscaFechaEnVector(Date dfecha, Vector vFechas,
            int posFecha) throws IOException {
        Properties props = loadProperties("/kaizen/general.properties");
        String mascaraFecha = props.getProperty("mascaraFecha");
        SimpleDateFormat frm = new SimpleDateFormat(mascaraFecha);
        if (vFechas.size() == 0) {
            return false;
        }
        int cont = 0;
        String sfecha = frm.format(dfecha).toString();
        for (; cont < vFechas.size(); cont++) {
            dbRecord ksrecord = (dbRecord) vFechas.elementAt(cont);
            String sfechaComp = ksrecord.getField(posFecha);
            Date dfechaComp = new Date();
            try {
                dfechaComp = frm.parse(sfechaComp);
                sfechaComp = frm.format(dfechaComp).toString();
                if (sfecha.startsWith(sfechaComp)) {
                    return true;
                }
            } catch (ParseException _ex) {
            }
        }

        return false;
    }

    public static String calcHMS(long timeInMilliSeconds) {
        long seconds = timeInMilliSeconds / 1000L;
        long hours = seconds / 3600L;
        seconds -= hours * 3600L;
        long minutes = seconds / 60L;
        String tiempo = hours + ":" + minutes;
        return tiempo;
    }

    public static String ciifWhere(String joinFK, String tipoVal,
            HttpServletRequest req) throws IOException {
        String tipo_ciifwhere = "ciifwhere=";
        String tipo_ciifwhereOr = "ciifwhereOr=";
        String sql1 = generaValIzq(tipoVal, joinFK);
        String sql2 = generaValDer(":", joinFK);
        String ciifwhere = generaValDer(tipoVal, joinFK);
        ciifwhere = generaValIzq(":", ciifwhere);
        Vector vValida = generaVectorStr(ciifwhere, "|");
        boolean b_res = true;
        if (tipoVal.trim().equals(tipo_ciifwhere)) {
            String s_res = FunInsertEng.fn_cIifCad(vValida, req);
            System.out.println(s_res);
            if (s_res.length() > 0) {
                b_res = false;
            }
        } else {
            b_res = FunInsertEng.fn_cIifCadOr(vValida, req);
        }
        if (b_res) {
            joinFK = sql1 + sql2;
        } else {
            joinFK = sql1;
        }
        return joinFK;
    }

    static Class _mthclass$(String class$) {
        try {
            return Class.forName(class$);
        } catch (ClassNotFoundException forName) {
            throw new NoClassDefFoundError(forName.getMessage());
        }
    }

    public static String conFechaNombreCampo(String campo) throws IOException {
        if (campo == null) {
            return "";
        }
        String nom_campo = "";
        Properties propsKaizen = loadProperties("/kaizen/general.properties");
        String mascara = propsKaizen.getProperty("mascaraFechaSelect");
        if (mascara.trim().length() > 0) {
            nom_campo = replaceString(mascara, "-campo-", campo);
        } else {
            nom_campo = campo;
        }
        return nom_campo;
    }

    public static String configuraFechaInsert(String fecha) throws IOException {
        if (fecha == null) {
            return "NULL";
        }
        String fechaIns = "";
        Properties propsKaizen = loadProperties("/kaizen/general.properties");
        String mascara = propsKaizen.getProperty("mascaraFechaInsert");
        if (mascara.trim().length() > 0) {
            fechaIns = replaceString(mascara, "-fecha-", fecha);
        } else {
            fechaIns = "'" + fecha + "'";
        }
        return fechaIns;
    }

    public static String configuraFechaInsert(String fecha,
            String mascara) throws IOException {
        if (fecha == null) {
            return "NULL";
        }
        String fechaIns = "";
        if (mascara.trim().length() > 0) {
            fechaIns = replaceString(mascara, "-fecha-", fecha);
        } else {
            fechaIns = "'" + fecha + "'";
        }
        return fechaIns;
    }

    public static String convierteFechaAString(Date fecha) throws IOException {
        Properties props = loadProperties("/kaizen/general.properties");
        String mascaraFecha = props.getProperty("mascaraFecha");
        SimpleDateFormat frm = new SimpleDateFormat(mascaraFecha);
        return frm.format(fecha).toString();
    }

    public static String convierteFechaAStringMascara(Date fecha,
            String mascaraFecha) throws IOException {
        SimpleDateFormat frm = new SimpleDateFormat(mascaraFecha);
        return frm.format(fecha).toString();
    }

    public static String convierteHoras(String horas) {
        if (esDecimal(horas)) {
            double dhoras = aDecimal(horas);
            int dhrsdecimal = aEntero(generaValDer(".", horas));
            dhrsdecimal -= 60;
            String shrsdecimal = String.valueOf(dhrsdecimal);
            if (dhrsdecimal >= 0) {
                int dhrsentero = aEntero(generaValIzq(".", horas));
                dhrsentero++;
                if (shrsdecimal.length() == 1) {
                    shrsdecimal = "0" + shrsdecimal;
                }
                String resultado = dhrsentero + "." + shrsdecimal;
                return resultado;
            } else {
                return horas;
            }
        } else {
            return "";
        }
    }

    public static Date convierteStringaFecha(String sfecha) throws IOException {
        Properties props = loadProperties("/kaizen/general.properties");
        String mascaraFecha = props.getProperty("mascaraFecha");
        SimpleDateFormat frm = new SimpleDateFormat(mascaraFecha);
        Date dfecha = new Date();
        try {
            dfecha = frm.parse(sfecha);
        } catch (ParseException _ex) {
            return null;
        }
        return dfecha;
    }

    public static Date convierteStringaFecha(String sfecha,
            String mascaraFecha) throws IOException {
        SimpleDateFormat frm = new SimpleDateFormat(mascaraFecha);
        Date dfecha = new Date();
        try {
            dfecha = frm.parse(sfecha);
        } catch (ParseException _ex) {
            return null;
        }
        return dfecha;
    }

    public static long convierteStringaFechaLong(String sfecha) throws IOException {
        Properties props = loadProperties("/kaizen/general.properties");
        String mascaraFecha = props.getProperty("mascaraFecha");
        SimpleDateFormat frm = new SimpleDateFormat(mascaraFecha);
        Date dfecha = new Date();
        try {
            dfecha = frm.parse(sfecha);
        } catch (ParseException _ex) {
            return 0L;
        }
        return dfecha.getTime();
    }

    public static void creaWinDir(String dir) {
        try {
            Process procesa = Runtime.getRuntime().exec(new String[]{"cmd", "/c", "md", dir});
            DataInputStream in =
                    new DataInputStream(new BufferedInputStream(procesa.getInputStream()));
            String s;
            while ((s = in.readLine()) != null) {
                System.out.println(s);
            }
        } catch (IOException _ex) {
            System.out.println("Existio un error al crear el directorio: " + dir);
        }
    }

    public String[] createArray(String text, int count, String sep) {
        String lsa_options[] = new String[count];
        int li_ind;
        for (li_ind = 0; text.indexOf(sep) != -1; li_ind++) {
            lsa_options[li_ind] = text.substring(0, text.indexOf(sep)).trim();
            text = text.substring(text.indexOf(sep) + 1, text.length()).trim();
        }

        if (text.length() > 0) {
            lsa_options[li_ind] = text;
        }
        return lsa_options;
    }

    public static String cuentaHoras(String hrEntrada1, String hrSalida1,
            String hrEntrada2, String hrSalida2) {
        try {
            if (esFechaValida(hrEntrada1) && esFechaValida(hrSalida1)) {
                if (!esFechaValida(hrEntrada2)) {
                    hrEntrada2 = "0:0";
                }
                if (!esFechaValida(hrSalida2)) {
                    hrSalida2 = "0:0";
                }
            }
            Vector v1 = new Vector();
            v1 = generaVectorStr(hrEntrada1, ":");
            int h1 = (new Integer((String) v1.elementAt(0))).intValue();
            int m1 = (new Integer((String) v1.elementAt(1))).intValue();
            v1 = generaVectorStr(hrSalida1, ":");
            int h2 = (new Integer((String) v1.elementAt(0))).intValue();
            int m2 = (new Integer((String) v1.elementAt(1))).intValue();
            v1 = generaVectorStr(hrEntrada2, ":");
            int h3 = (new Integer((String) v1.elementAt(0))).intValue();
            int m3 = (new Integer((String) v1.elementAt(1))).intValue();
            v1 = generaVectorStr(hrSalida2, ":");
            int h4 = (new Integer((String) v1.elementAt(0))).intValue();
            int m4 = (new Integer((String) v1.elementAt(1))).intValue();
            GregorianCalendar liftOff1 = new GregorianCalendar(0, 0, 0, h1, m1, 0);
            Date d1 = liftOff1.getTime();
            GregorianCalendar liftOff2 = new GregorianCalendar(0, 0, 0, h2, m2, 0);
            Date d2 = liftOff2.getTime();
            GregorianCalendar liftOff3 = new GregorianCalendar(0, 0, 0, h3, m3, 0);
            Date d3 = liftOff3.getTime();
            GregorianCalendar liftOff4 = new GregorianCalendar(0, 0, 0, h4, m4, 0);
            Date d4 = liftOff4.getTime();
            long time1 = d1.getTime();
            long time2 = d2.getTime();
            long diff5 = time2 - time1;
            String s5 = calcHMS(diff5);
            long time3 = d3.getTime();
            long time4 = d4.getTime();
            long diff6 = time4 - time3;
            String s6 = calcHMS(diff6);
            Vector vtiempo = new Vector();
            vtiempo = generaVectorStr(s5, ":");
            int horas1 = (new Integer((String) vtiempo.elementAt(0))).intValue();
            int minutos1 = (new Integer((String) vtiempo.elementAt(1))).intValue();
            vtiempo = generaVectorStr(s6, ":");
            int horas2 = (new Integer((String) vtiempo.elementAt(0))).intValue();
            int minutos2 = (new Integer((String) vtiempo.elementAt(1))).intValue();
            GregorianCalendar gc9 = new GregorianCalendar(0, 0, 0, 0, 0, 0);
            gc9.add(11, horas1);
            gc9.add(12, minutos1);
            gc9.add(11, horas2);
            gc9.add(12, minutos2);
            Date d9 = gc9.getTime();
            return convierteFechaAString(d9);
        } catch (Exception _ex) {
            return "";
        }
    }

    public static String cuentaHorasAct(Vector vData, String separador) {
        String stotal = "";
        int total = 0;
        int totalDec = 0;
        for (int i = 0; i < vData.size(); i++) {
            String shora = (String) vData.elementAt(i);
            shora = shora.trim();
            String sep = separador;
            if (sep.equals(":") && shora.length() > 0) {
                shora = replaceString1(shora, ":", ".");
                sep = ".";
            }
            if (shora.length() > 0) {
                if (esDecimal(shora)) {
                    if (shora.indexOf(sep) >= 0) {
                        String sder = generaValDer(sep, shora);
                        if (sder.length() > 2) {
                            return stotal;
                        }
                        int hrs = aEntero(generaValIzq(sep, shora));
                        if (hrs > 24) {
                            return stotal;
                        }
                        totalDec += aEntero(sder);
                        total += hrs;
                    } else {
                        int hrs = aEntero(shora);
                        if (hrs > 24) {
                            return stotal;
                        }
                        total += hrs;
                    }
                } else {
                    return stotal;
                }
            }
        }

        if (totalDec >= 60) {
            double horas = totalDec / 60;
            String shoras = String.valueOf(horas);
            if (shoras.indexOf(".") >= 0) {
                int ihora = aEntero(generaValIzq(".", shoras));
                int multiplo = ihora * 60;
                totalDec -= multiplo;
                total += ihora;
            } else {
                int ihora = aEntero(shoras);
                total += ihora;
                totalDec = 0;
            }
        }
        stotal = total + ":" + totalDec;
        return stotal;
    }

    public void doGet(HttpServletRequest req,
            HttpServletResponse resp) throws ServletException,
            IOException {
        resp.setContentType("text/html");
        PrintWriter out = new PrintWriter(resp.getOutputStream());
    }

    public static String ejecutaStoreServlet(String nombre_clase,
            HttpServletRequest req) {
        String resultado = "";
        try {
            if (!DbAppUnivC.setStoreConn()) {
                return "Error: No se puede establecer la conexi\363n.";
            }
            java.sql.Connection conn = DbAppUnivC.getStoreConn();
            if (conn == null) {
                return "Error: La conexi\363n es nula.";
            }
            Class cls = Class.forName(nombre_clase);
            Object objeto = cls.newInstance();
            Method mts[] = objeto.getClass().getDeclaredMethods();
            Method metodo = null;
            for (int i = 0; i < mts.length; i++) {
                if (mts[i].toString().indexOf("proceso") < 0) {
                    continue;
                }
                System.out.println("encontrado metodo" + mts[i]);
                metodo = mts[i];
                break;
            }

            System.out.println("Invocando la clase " + nombre_clase);
            Object returnedObject = metodo.invoke(objeto, new Object[]{req, conn});
            String respuesta = ((String) returnedObject).toString();
            return respuesta;
        } catch (Exception ex) {
            return "ORA-20501:@Atenci\363n, la clase Java Store Procedure "
                    + nombre_clase
                    + ", no existe o no se encontr\363 algunos de los m\350todos: " + ex
                    + "@";
        }
    }

    public static String encuentraElementos(String clave, Vector vData) {
        String sNombre = "";
        if (vData == null) {
            return "";
        }
        for (int cont = 0; cont < vData.size(); cont++) {
            String datos[] = (String[]) vData.elementAt(cont);
            if (datos[0] != null) {
                String claveData = datos[0];
                if (clave.trim().equals(claveData)) {
                    return datos[1];
                }
            }
        }

        return sNombre;
    }

    public static String encuentraLiga(String opcion,
            HttpServletRequest req) throws IOException {
        String sistema = tomaParametro("dic_sistema", req);
        String sql =
                "select op_cveopc, op_url, op_prog_apart from gentop where op_cvesis = '"
                + sistema + "'";
        Vector vOpciones = DbAppCache.execQuery(sql);
        return encuentraLigaVector(vOpciones, opcion);
    }

    public static String encuentraLigaVector(Vector vRecord, String opcion) {
        int a = 0;
        String salida = "";
        for (; a < vRecord.size(); a++) {
            dbRecord ksrecord = (dbRecord) vRecord.elementAt(a);
            String ks_opcion = ksrecord.getField(1);
            String ks_url = ksrecord.getField(2);
            String ks_prog_apart = ksrecord.getField(3);
            if (ks_opcion == null) {
                ks_opcion = "";
            }
            if (ks_url == null) {
                ks_url = "";
            }
            if (opcion.toUpperCase().trim().equals(ks_opcion.toUpperCase().trim())) {
                if (ks_prog_apart != null) {
                    return ks_prog_apart;
                } else {
                    return ks_url;
                }
            }
        }

        return "";
    }

    public static String encuentraMenuVecorXSubmenu(Vector vRecord,
            String submenu) {
        int a = 0;
        String salida = "";
        for (; a < vRecord.size(); a++) {
            dbRecord ksrecord = (dbRecord) vRecord.elementAt(a);
            String ks_menu = ksrecord.getField(1);
            String ks_submenu = ksrecord.getField(2);
            if (ks_menu == null) {
                ks_menu = "";
            }
            if (ks_submenu == null) {
                ks_submenu = "";
            }
            if (submenu.trim().equals(ks_submenu.trim())) {
                return ks_menu;
            }
        }

        return "";
    }

    public static String encuentraMenuVector(Vector vRecord, String opcion) {
        int a = 0;
        String salida = "";
        for (; a < vRecord.size(); a++) {
            dbRecord ksrecord = (dbRecord) vRecord.elementAt(a);
            String ks_opcion = ksrecord.getField(1);
            String ks_url = ksrecord.getField(2);
            if (ks_opcion == null) {
                ks_opcion = "";
            }
            if (ks_url == null) {
                ks_url = "";
            }
            if (opcion.toLowerCase().trim().equals(ks_url.toLowerCase().trim())) {
                return ks_opcion;
            }
        }

        return "";
    }

    public static String encuentraMenuXSubmenu(String submenu,
            HttpServletRequest req) throws IOException {
        String sistema = tomaParametro("dic_sistema", req);
        String sql =
                "select me_cveopc, me_cveopc_ejec from gentme where me_cvesis = '"
                + sistema + "' order by me_cveopc_ejec ";
        Vector vOpciones = DbAppCache.execQuery(sql);
        String padre = "";
        String padre_ant = "";
        for (padre = padre_ant = encuentraMenuVecorXSubmenu(vOpciones, submenu);
                padre.trim().length() > 0 && !padre.equals("m0");) {
            padre = encuentraMenuVecorXSubmenu(vOpciones, padre);
            if (padre.trim().length() > 0 && !padre.equals("m0")) {
                padre_ant = padre;
            }
        }

        return padre_ant;
    }

    public static int encuentraPosElementos(String clave, Vector vData) {
        if (vData == null) {
            return -1;
        }
        for (int cont = 0; cont < vData.size(); cont++) {
            String datos[] = (String[]) vData.elementAt(cont);
            if (datos[0] != null) {
                String claveData = datos[0];
                if (clave.trim().equals(claveData)) {
                    return cont;
                }
            }
        }

        return -1;
    }

    public static boolean encuentraUsuario(Vector vRecord, String usuario,
            String password) {
        int a = 0;
        String salida = "";
        if (usuario == null) {
            usuario = "";
        }
        if (password == null) {
            password = "";
        }
        for (; a < vRecord.size(); a++) {
            dbRecord ksrecord = (dbRecord) vRecord.elementAt(a);
            String ks_usuario = ksrecord.getField(1);
            String ks_password = ksrecord.getField(2);
            if (ks_usuario == null) {
                ks_usuario = "";
            }
            if (ks_password == null) {
                ks_password = "";
            }
            if (usuario.toLowerCase().trim().equals(ks_usuario.toLowerCase().trim())
                    && password.toLowerCase().trim().equals(ks_password.toLowerCase().trim())) {
                return true;
            }
        }

        return false;
    }

    public static boolean esDecimal(String valor) {
        try {
            double val = 0.0D;
            val = Double.valueOf(valor).doubleValue();
        } catch (NumberFormatException _ex) {
            return false;
        }
        return true;
    }

    public static boolean esDivisionEntera(int dividendo, int divisor) {
        try {
            int val = 0;
            val = dividendo / divisor;
        } catch (NumberFormatException _ex) {
            return false;
        }
        return true;
    }

    public static boolean esEntero(String valor) {
        try {
            int val = 0;
            val = Integer.valueOf(valor).intValue();
        } catch (NumberFormatException _ex) {
            return false;
        }
        return true;
    }

    public static boolean esFechaValida(String sfecha) {
        try {
            Date fecha = convierteStringaFecha(sfecha);
            SimpleDateFormat frm = new SimpleDateFormat("k:mm");
            frm.format(fecha).toString();
        } catch (Exception _ex) {
            return false;
        }
        return true;
    }

    public static boolean existeElementos(String clave, Vector vData) {
        if (vData == null) {
            return false;
        }
        for (int cont = 0; cont < vData.size(); cont++) {
            String datos[] = (String[]) vData.elementAt(cont);
            if (datos[0] != null) {
                String claveData = datos[0];
                if (clave.trim().equals(claveData)) {
                    return true;
                }
            }
        }

        return false;
    }

    public static String fechaHoy() throws IOException {
        Properties props = loadProperties("/kaizen/general.properties");
        String mascaraFecha = props.getProperty("mascaraFecha");
        return fechaHoy(mascaraFecha);
    }

    public static String fechaHoy(String mascaraFecha) throws IOException {
        SimpleDateFormat frm = new SimpleDateFormat(mascaraFecha);
        Date date = new Date();
        return frm.format(date).toString();
    }

    public static long fechaHoy_long() {
        Date date = new Date();
        return date.getTime();
    }

    public static String filtraReg(dbRecord ksrecord, int num) {
        String campo = ksrecord.getField(num);
        return validaNulo(campo);
    }

    public static String formateaFechaMascara(String sFecha,
            String mascaraFecha) throws IOException {
        Date fecha = convierteStringaFecha(sFecha);
        if (fecha == null) {
            return sFecha;
        } else {
            SimpleDateFormat frm = new SimpleDateFormat(mascaraFecha);
            return frm.format(fecha).toString();
        }
    }

    public static String generaError(String err,
            HttpServletRequest req) throws IOException {
        String dir_pagInicio = "";
        String pag_error = "";
        try {
            String sistema = tomaParametro("dic_sistema", req);
            String nombre_prop = "/kaizen/" + sistema + "Web.properties";
            Properties props = loadProperties(nombre_prop);
            pag_error = props.getProperty("pag_error");
            dir_pagInicio = props.getProperty("dir_pagInicio");
        } catch (Exception _ex) {
            pag_error = "";
        }
        if (pag_error.length() == 0) {
            return "";
        } else {
            String salida =
                    templates.generaPlantilla(dir_pagInicio + pag_error, req);
            salida = replaceString(salida, "<!--datos-->", err);
            return salida;
        }
    }

    public static String generaErrorStore(String error) {
        String msg = "";
        if (error.indexOf("ORA-20501") >= 0) {
            msg = error;
            if (error.indexOf("@") > 0) {
                msg = generaValDer("@", error);
            }
        } else {
            msg = "Operaci\363n invalida, consulte la informaci\363n capturada.";
        }
        msg = replaceString(msg, "@", " ");
        msg = replaceString(msg, "ORA-20501", " ");
        if (msg.indexOf("ORA-") > 0) {
            msg = generaValIzq("ORA-", msg);
        }
        return msg;
    }

    public static String generaMsg(String msg,
            HttpServletRequest req) throws IOException {
        String dir_pagInicio = "";
        String pag_msg = "";
        try {
            String sistema = tomaParametro("dic_sistema", req);
            String nombre_prop = "/kaizen/" + sistema + "Web.properties";
            Properties props = loadProperties(nombre_prop);
            pag_msg = props.getProperty("pag_msg");
            dir_pagInicio = props.getProperty("dir_pagInicio");
        } catch (Exception _ex) {
            pag_msg = "";
        }
        if (pag_msg.length() == 0) {
            return "";
        } else {
            String salida = templates.generaPlantilla(dir_pagInicio + pag_msg, req);
            salida = replaceString(salida, "<!--datos-->", msg);
            return salida;
        }
    }

    public static String generaValDer(String cadb, String cadena) {
        String s_val =
                cadena.substring(cadena.toUpperCase().indexOf(cadb.toUpperCase())
                + cadb.length(), cadena.length());
        return s_val;
    }

    public static String generaValDerArr(String cadb, String cadena,
            String[] arr) {
        if (cadena.startsWith("-") && cadb.equals("-")) {
            cadena = cadena.substring(1);
        }
        String s_val = generaValDer(cadb, cadena);
        int pos = -1;
        for (int i = 0; i < arr.length; i++) {
            if (s_val.indexOf(arr[i]) > 0) {
                int p = s_val.indexOf(arr[i]);
                if (pos < 0) {
                    pos = p;
                }
                if (p < pos) {
                    pos = p;
                }
            }
        }

        if (pos > 0) {
            s_val = s_val.substring(0, pos);
        }
        return s_val;
    }

    public static String generaValDerLast(String cadb, String cadena) {
        String s_val =
                cadena.substring(cadena.toUpperCase().lastIndexOf(cadb.toUpperCase())
                + cadb.length(), cadena.length());
        return s_val;
    }

    public static String generaValIzq(String cadb, String cadena) {
        String s_val =
                cadena.substring(0, cadena.toUpperCase().indexOf(cadb.toUpperCase()));
        return s_val;
    }

    public static String generaValIzqArr(String cadb, String cadena,
            String[] arr) {
        boolean negativo = false;
        if (cadena.startsWith("-") && cadb.equals("-")) {
            negativo = true;
            cadena = cadena.substring(1);
        }
        String s_val = generaValIzq(cadb, cadena);
        int pos = -1;
        for (int i = 0; i < arr.length; i++) {
            if (s_val.lastIndexOf(arr[i]) >= 0) {
                int p = s_val.lastIndexOf(arr[i]);
                if (pos == -1) {
                    pos = p;
                }
                if (p > pos) {
                    pos = p;
                }
            }
        }

        if (pos > 0) {
            s_val = s_val.substring(pos + 1);
        }
        if (negativo) {
            s_val = "-" + s_val;
        }
        return s_val;
    }

    public static String generaValIzqLast(String cadb, String cadena) {
        String s_val =
                cadena.substring(0, cadena.toUpperCase().lastIndexOf(cadb.toUpperCase()));
        return s_val;
    }

    public static Vector generaVectorStr(String cadena, String sep) {
        Vector vStr = new Vector();
        if (cadena == null) {
            return vStr;
        }
        cadena = cadena.trim();
        if (cadena.length() == 0) {
            return vStr;
        }
        int pos;
        for (; cadena.indexOf(sep) >= 0;
                cadena = cadena.substring(pos + sep.length(), cadena.length())) {
            pos = cadena.indexOf(sep);
            String s_val = cadena.substring(0, pos);
            vStr.addElement(s_val);
        }

        vStr.addElement(cadena);
        return vStr;
    }

    public static Vector generaVectorStr_ksRecord(Vector vRecord) {
        Vector vSalida = new Vector();

        if (vSalida.size() == 0) { //   //
            return vSalida;
        }
        for (int i = 0; i < vRecord.size(); i++) {
            dbRecord ksrecord = (dbRecord) vRecord.elementAt(i);
            int tam = ksrecord.getFieldCount() + 1;
            String arr[] = new String[tam];
            for (int reg = 0; reg < tam; reg++) {
                arr[reg] = filtraReg(ksrecord, reg);
            }

            vSalida.addElement(arr);
        }

        return vSalida;
    }

    public static Vector generaVectorStr_ksRecord_Applet(Vector vRecord) {
        Vector vSalida = new Vector();
        if (vRecord.size() == 0) {
            return vSalida;
        }
        for (int i = 0; i < vRecord.size(); i++) {
            dbRecord ksrecord = (dbRecord) vRecord.elementAt(i);
            int tam = ksrecord.getFieldCount() + 1;
            String arr[] = new String[tam];
            for (int reg = 1; reg < tam; reg++) {
                arr[reg - 1] = filtraReg(ksrecord, reg);
            }

            vSalida.addElement(arr);
        }

        return vSalida;
    }

    public static HttpServletRequest getRequest(HttpServletRequest req,
            String pos) {
        int ipos = Integer.valueOf(pos).intValue();
        HttpServletRequest vReq = (HttpServletRequest) vRequest.elementAt(ipos - 1);
        return vReq;
    }

    public static void insertaBitacora(HttpServletRequest req, String otros) {
        HttpSession session = req.getSession(true);
        if (session == null) {
            return;
        }
        if (session.getAttribute("dic_sistema") == null) {
            return;
        }
        String sistema = session.getAttribute("dic_sistema").toString();
        String nombre_prop = "/kaizen/" + sistema + "Web.properties";
        Properties props = null;
        try {
            props = loadProperties(nombre_prop);
        } catch (Exception _ex) {
            System.out.println("Hubo problemas cargando propiedades en insertaBitacora");
        }
        String guardaBitacora = props.getProperty("guardaBitacora");
        if (!guardaBitacora.equals("true")) {
            return;
        }
        String textoDef = "no especificado";
        String usuario = validaNuloEsp(tomaParametro("usuario", req), textoDef);
        String estado = validaNuloEsp(tomaParametro("dic_estado", req), textoDef);
        String tabla = validaNuloEsp(tomaParametro("dic_tabla", req), textoDef);
        String compania = validaNuloEsp(tomaParametro("compania", req), textoDef);
        String perfil = validaNuloEsp(tomaParametro("dic_grupo", req), textoDef);
        String ip = validaNuloEsp(tomaParametro("dic_dir_ip", req), textoDef);
        String host = validaNuloEsp(tomaParametro("dic_acceso_ip", req), textoDef);
        if (tabla.toLowerCase().trim().equals("dt_bitacora")) {
            return;
        }
        if (otros.indexOf("'") >= 0) {
            otros = validaComillas(otros);
        }
        String id = null;
        try {
            id = valorSqlUni("select max(id)+1 from dt_bitacora");
        } catch (Exception _ex) {
            System.out.println("Error al seleccionar en insertaBitacora");
        }
        if (id == null) {
            id = "0";
        }
        String sqlI =
                "insert into dt_bitacora (id, sistema, usuario, estado, tabla, compania,";
        sqlI = sqlI + " perfil, ip, host, sql, hora) ";
        sqlI =
                sqlI + " values(" + id + " , '" + sistema + "','" + usuario + "', "
                + estado + ",'" + tabla;
        sqlI =
                sqlI + "','" + compania + "','" + perfil + "','" + ip + "','" + host
                + "','";
        sqlI = sqlI + otros + "', sysdate) ";
        try {
            DbAppUnivC.execStatement(sqlI);
        } catch (Exception _ex) {
            System.out.println("Error al insertar en bd insertaBitacora");
        }
    }

    public static Properties loadProperties(String fileName) throws IOException {
        InputStream is = null;
        Properties props = new Properties();
        //is = (java.util.Properties.class).getResourceAsStream(fileName);
        is = (utilerias.class).getClassLoader().getResourceAsStream(fileName);
        props.load(is);
        if (is != null) {
            is.close();
        }
        return props;
    }

    public static int numRegSql(String sql) throws IOException {
        String valSql = null;
        Vector vRecord = DbAppUnivC.execQuery(sql);
        return vRecord.size();
    }

    public static String obtieneDescDic(String url, String sistema,
            String idioma) throws IOException {
        String sql = " select  mo_nombre from gentop , gentmo where";
        sql = sql + " mo_cvesis     = '" + sistema + "'";
        sql = sql + " and op_url    = '" + url + "'";
        sql = sql + " and mo_cveidi = '" + idioma + "'";
        sql = sql + " and  op_cvesis = mo_cvesis";
        sql = sql + " and op_cveopc = mo_cveopc";
        Vector vRecord = DbAppCache.execQuery(sql);
        if (vRecord.size() > 0) {
            dbRecord ksrecord = (dbRecord) vRecord.elementAt(0);
            String desc = ksrecord.getField(1);
            return desc;
        } else {
            return "";
        }
    }

    public static String obtieneDescDic(String url,
            HttpServletRequest req) throws IOException {
        String sistema = tomaParametro("dic_sistema", req);
        String idioma = tomaParametro("dic_idioma", req);
        return obtieneDescDic(url, sistema, idioma);
    }

    public static Vector obtieneDiccionario(String tabla, String idioma,
            boolean informativo,
            String sistema) throws IOException {
        String sqlSelect =
                "SELECT dicc.BD_tabla, dicc.BD_campo, BD_tipollave, BD_tipocampo, HTML_tipocampo, BD_longitud, ";
        sqlSelect =
                sqlSelect + "HTML_ancho, SQL_Insert, SQL_Update, SQL_Delete, SQL_Select, SQL_JoinFk, msg.etiqueta, requerido, BD_FK, ";
        sqlSelect =
                sqlSelect + "selrep, rep_visible, det_requerido, det_rep_visible, valor_inicial, sqrParametro, Muestra_Campo, html_orden, valor_secuencial, encriptado, mayusculas, html_lineas, sql_detalle, camp_busqueda, sql_busqueda, campo_informativo ";
        sqlSelect =
                sqlSelect + "FROM diccionario dicc, dt_mensajes msg WHERE dicc.BD_tabla = msg.BD_tabla ";
        sqlSelect =
                sqlSelect + "AND dicc.BD_campo = msg.BD_campo AND msg.idioma = '"
                + idioma + "' ";
        sqlSelect = sqlSelect + "AND dicc.bd = '" + sistema + "' ";
        sqlSelect = sqlSelect + "AND msg.bd = '" + sistema + "' ";
        sqlSelect = sqlSelect + "AND dicc.BD_tabla = '" + tabla + "' ";
        if (!informativo) {
            sqlSelect = sqlSelect + "AND  campo_informativo  = 'n' ";
        }
        sqlSelect = sqlSelect + " ORDER BY dicc.BD_tabla, HTML_orden";
        Vector vSalida = new Vector();
        Vector vRecord = DbAppCache.execQuery(sqlSelect);
        Vector vStr = generaVectorStr_ksRecord(vRecord);
        return vStr;
    }

    public static Vector obtieneDiccionario(String tabla, String idioma,
            boolean informativo,
            HttpServletRequest req) throws IOException {
        String sistema = tomaParametro("dic_sistema", req);
        String nombre_prop = "/kaizen/" + sistema + "Web.properties";
        Properties props = loadProperties(nombre_prop);
        return obtieneDiccionario(tabla, idioma, informativo, sistema);
    }

    public static Vector obtieneDiccionarioCache(String tabla, String idioma,
            boolean informativo,
            String sistema) throws IOException {
        String sqlSelect =
                "SELECT dicc.BD_tabla, dicc.BD_campo, BD_tipollave, BD_tipocampo, HTML_tipocampo, BD_longitud, ";
        sqlSelect =
                sqlSelect + "HTML_ancho, SQL_Insert, SQL_Update, SQL_Delete, SQL_Select, SQL_JoinFk, msg.etiqueta, requerido, BD_FK, ";
        sqlSelect =
                sqlSelect + "selrep, rep_visible, det_requerido, det_rep_visible, valor_inicial, sqrParametro, Muestra_Campo, html_orden, valor_secuencial, encriptado, mayusculas, html_lineas, sql_detalle, camp_busqueda, sql_busqueda, campo_informativo ";
        sqlSelect =
                sqlSelect + "FROM diccionario dicc, dt_mensajes msg WHERE dicc.BD_tabla = msg.BD_tabla ";
        sqlSelect =
                sqlSelect + "AND dicc.BD_campo = msg.BD_campo AND msg.idioma = '"
                + idioma + "' ";
        sqlSelect = sqlSelect + "AND dicc.bd = '" + sistema + "' ";
        sqlSelect = sqlSelect + "AND msg.bd = '" + sistema + "' ";
        if (!informativo) {
            sqlSelect = sqlSelect + "AND  campo_informativo  = 'n' ";
        }
        sqlSelect = sqlSelect + " ORDER BY dicc.BD_tabla, HTML_orden";
        Vector vSalida = new Vector();
        Vector vRecord = DbAppCache.execQuery(sqlSelect);
        int col = 1;
        for (int i = 0; i < vRecord.size(); i++) {
            dbRecord ksrecord = (dbRecord) vRecord.elementAt(i);
            String cad = ksrecord.getField(col);
            if (cad != null
                    && tabla.trim().toUpperCase().equals(cad.trim().toUpperCase())) {
                vSalida.addElement(vRecord.elementAt(i));
            }
        }

        Vector vStr = generaVectorStr_ksRecord(vSalida);
        return vStr;
    }

    public static int obtienePosDatos(Vector vData, int col, String clave) {
        int cont = 0;
        clave = clave.trim();
        for (; cont < vData.size(); cont++) {
            String sDatos[] = (String[]) vData.elementAt(cont);
            String compara = sDatos[col];
            if (compara != null) {
                compara = compara.trim();
            } else {
                compara = "";
            }
            if (clave.toUpperCase().equals(compara.toUpperCase())) {
                System.out.println("Encontre en obtienePosDatos  " + compara
                        + " contra: " + clave);
                return cont;
            }
        }

        return -1;
    }

    public static String obtienePosTabLim(Vector vData, String simporte, int col) {
        int cont = 0;
        double importe = aDecimal(simporte);
        for (; cont < vData.size(); cont++) {
            String sDatos[] = (String[]) vData.elementAt(cont);
            double li = aDecimal(sDatos[1]);
            double ls = aDecimal(sDatos[2]);
            System.out.println(li + " , " + ls + " importe: " + importe);
            if (importe >= li && importe <= ls) {
                return sDatos[col];
            }
        }

        return "0";
    }

    public static Vector obtieneTabla(String tabla,
            String sistema) throws IOException {
        return obtieneTablaCache(tabla, sistema);
    }

    public static Vector obtieneTabla(String tabla,
            HttpServletRequest req) throws IOException {
        String sistema = tomaParametro("dic_sistema", req);
        return obtieneTabla(tabla, sistema);
    }

    public static Vector obtieneTablaCache(String tabla,
            String sistema) throws IOException {
        String sqlSelect =
                "select bd_tabla, reporte, proceso, sel_rep, grid_maestro, ";
        sqlSelect =
                sqlSelect + "grid_detalle, tabla_detalle, sql_tabla_detalle, sqrSalida, mascaraParametro, proc_sql_alta, proc_sql_baja, proc_sql_mod, proc_sql_consulta, forma, sql_reporte, iconos_adicionales, url_proceso ";
        sqlSelect = sqlSelect + "from dt_tablas  where bd = '" + sistema + "'";
        Vector vSalida = new Vector();
        Vector vRecord = DbAppCache.execQuery(sqlSelect);
        int col = 1;
        for (int i = 0; i < vRecord.size(); i++) {
            dbRecord ksrecord = (dbRecord) vRecord.elementAt(i);
            String cad = ksrecord.getField(col);
            if (cad != null
                    && tabla.trim().toUpperCase().equals(cad.trim().toUpperCase())) {
                vSalida.addElement(vRecord.elementAt(i));
                i = vRecord.size();
            }
        }

        return vSalida;
    }

    public static Vector obtieneTabla_Est(String tabla,
            HttpServletRequest req) throws IOException {
        String sistema = tomaParametro("dic_sistema", req);
        return obtieneTabla_EstCache(tabla, sistema);
    }

    public static Vector obtieneTabla_EstCache(String tabla,
            String sistema) throws IOException {
        String sqlSelect = "select bd_tabla, reporte, proceso, forma ";
        sqlSelect = sqlSelect + "from dt_tablas  where bd = '" + sistema + "'";
        Vector vSalida = new Vector();
        Vector vRecord = DbAppCache.execQuery(sqlSelect);
        int col = 1;
        for (int i = 0; i < vRecord.size(); i++) {
            dbRecord ksrecord = (dbRecord) vRecord.elementAt(i);
            String cad = ksrecord.getField(col);
            if (cad != null
                    && tabla.trim().toUpperCase().equals(cad.trim().toUpperCase())) {
                vSalida.addElement(vRecord.elementAt(i));
                i = vRecord.size();
            }
        }

        return vSalida;
    }

    public static int queDiaEs(Date dfecha) {
        Calendar cal = new GregorianCalendar();
        cal.setTime(dfecha);
        int dia = cal.get(7);
        return dia;
    }

    public static String quitaEnters(String texto) {
        char c_enter = '\n';
        texto = validaNulo(texto);
        return replaceString(texto, String.valueOf(c_enter), " ");
    }

    public static String redondea(String valor) {
        if (valor == null) {
            valor = "";
        }
        String salida = "";
        Locale locales[] = {new Locale("fr", "FR"), new Locale("de", "DE"), new Locale("en", "US")};
        if (valor.trim().length() > 0) {
            try {
                NumberFormat currencyFormatter =
                        NumberFormat.getCurrencyInstance(locales[2]);
                double dcant = Double.valueOf(valor).doubleValue();
                Double d_cantidad = Double.valueOf(Double.toString(dcant));
                salida = currencyFormatter.format(d_cantidad);
                if (salida.startsWith("(") && salida.length() > 3) {
                    salida =
                            salida.substring(1, 1) + salida.substring(2, salida.length()
                            - 1);
                    salida = "-" + salida;
                } else {
                    salida = salida.substring(1);
                }
                salida = salida;
            } catch (NumberFormatException _ex) {
                salida = valor;
            }
        }
        return salida;
    }

    public static dbRecord registroSqlUni(String sql) throws IOException {
        Vector vRecord = DbAppUnivC.execQuery(sql);
        if (vRecord.size() == 0) {
            return null;
        } else {
            dbRecord ksrecord = (dbRecord) vRecord.elementAt(0);
            return ksrecord;
        }
    }

    public static dbRecord registroSqlUni(String sql, String ls_driver,
            String ls_url, String ls_user,
            String ls_password) throws IOException {
        Vector vRecord =
                DbAppUnivC.execQuery(sql, ls_driver, ls_url, ls_user, ls_password);
        if (vRecord.size() == 0) {
            return null;
        } else {
            dbRecord ksrecord = (dbRecord) vRecord.elementAt(0);
            return ksrecord;
        }
    }

    public static String regresaDia(int i_dia) {
        String dia = "";
        if (i_dia == 1) {
            dia = "d";
        }
        if (i_dia == 2) {
            dia = "l";
        }
        if (i_dia == 3) {
            dia = "m";
        }
        if (i_dia == 4) {
            dia = "i";
        }
        if (i_dia == 5) {
            dia = "j";
        }
        if (i_dia == 6) {
            dia = "v";
        }
        if (i_dia == 7) {
            dia = "s";
        }
        return dia;
    }

    public static String replaceString(String fuente, String cadenab,
            String cadenar) {
        String salida = "";
        int pos = fuente.indexOf(cadenab);
        if (pos >= 0) {
            salida = fuente.substring(0, pos) + cadenar;
            salida =
                    salida + fuente.substring(pos + cadenab.length(), fuente.length());
        } else {
            salida = fuente;
        }
        if (salida.indexOf(cadenab) >= 0) {
            salida = replaceString(salida, cadenab, cadenar);
        }
        return salida;
    }

    public static String replaceString1(String fuente, String cadenab,
            String cadenar) {
        String salida = "";
        int pos = fuente.indexOf(cadenab);
        if (pos >= 0) {
            salida = fuente.substring(0, pos) + cadenar;
            salida =
                    salida + fuente.substring(pos + cadenab.length(), fuente.length());
        } else {
            salida = fuente;
        }
        return salida;
    }

    public static String replaceStringOnLine(String fuente, String cadenab,
            String cadenar) {
        if (fuente == null) {
            return "";
        }
        String salida = fuente;
        for (int pos = salida.indexOf(cadenab); pos >= 0;) {
            salida = fuente.substring(0, pos) + cadenar;
            salida =
                    salida + fuente.substring(pos + cadenab.length(), fuente.length());
            fuente = salida;
            int tam = fuente.length();
            int pos2 = pos + cadenar.length();
            if (pos2 <= tam) {
                pos = fuente.indexOf(cadenab, pos2);
            } else {
                pos = -1;
            }
        }

        return salida;
    }

    public static int resta2Fechas_a_Anios(String s_fecha_Actual,
            String s_fecha_Antigua) throws IOException {
        double anios = 0.0D;
        Properties props = loadProperties("/kaizen/general.properties");
        String mascaraFecha = props.getProperty("mascaraFecha");
        SimpleDateFormat frm = new SimpleDateFormat(mascaraFecha);
        Date d_fecha3 = new Date();
        Date d_fecha1;
        Date d_fecha2;
        try {
            d_fecha1 = frm.parse(s_fecha_Actual);
            d_fecha2 = frm.parse(s_fecha_Antigua);
        } catch (ParseException _ex) {
            return 0;
        }
        anios = (double) (d_fecha1.getTime() - d_fecha2.getTime()) / 86400000D;
        anios /= 365D;
        int i_anios = 0;
        String s_anios = String.valueOf(anios);
        if (s_anios.indexOf(".") > 0) {
            s_anios = s_anios.substring(0, s_anios.indexOf("."));
        }
        if (s_anios.trim().length() > 0) {
            i_anios = Integer.valueOf(s_anios).intValue();
        }
        return i_anios;
    }

    public static int setRequest(HttpServletRequest req) {
        if (vRequest == null) {
            vRequest = new Vector();
        }
        vRequest.addElement(req);
        return vRequest.size();
    }

    public static boolean sonLetras(String cad) {
        cad = cad.trim().toUpperCase();
        char c[] = cad.toCharArray();
        for (int i = 0; i < cad.length(); i++) {
            if (String.valueOf(c[i]).hashCode() < 65
                    || String.valueOf(c[i]).hashCode() > 90) {
                return false;
            }
        }

        return true;
    }

    public static String sustituyeEspaciosLink(String cadena) {
        cadena = replaceString(cadena, "  ", " ");
        cadena = replaceString(cadena, " ", "+");
        return cadena;
    }

    public static boolean tieneMenosdeDosDecimales(String sNum, String sep) {
        if (sep.length() > 0) {
            sNum = replaceString1(sNum, sep, ".");
        }
        if (!esDecimal(sNum)) {
            return false;
        }
        if (sNum.indexOf(".") >= 0) {
            String sDecimales = generaValDer(".", sNum);
            if (sDecimales.trim().length() > 2) {
                return false;
            }
        }
        return true;
    }

    public static boolean tieneValorReg(String campo) {
        boolean valido = false;
        if (campo.length() > 0) {
            valido = true;
        }
        return valido;
    }

    public static boolean tieneValorReg(dbRecord ksrecord, int num) {
        boolean valido = false;
        String campo = filtraReg(ksrecord, num);
        if (campo.length() > 0) {
            valido = true;
        }
        return valido;
    }

    public static String tomaClaveVector(int indice, Vector vData) {
        String arr_lista[] = (String[]) vData.elementAt(indice);
        return arr_lista[0].trim();
    }

    public static String tomaCompania(String usuario,
            HttpServletRequest req) throws IOException {
        String sistema = tomaParametro("dic_sistema", req);
        String sql =
                "select uc_compania  from gentuc where uc_usuario = '" + usuario.trim()
                + "' and uc_cvesis = '" + sistema + "'";
        String cia = valorSqlCache(sql);
        return cia;
    }

    public static Vector tomaEsquema(ResultSetMetaData meta) throws SQLException {
        Vector vData = new Vector();
        if (meta == null) {
            System.out.println("NO HAY DATOS EN ResultSetMetaData");
            return vData;
        }
        int columns = meta.getColumnCount();
        int numbers = 0;
        for (int i = 1; i <= columns; i++) {
            String data[] = new String[3];
            String column = meta.getColumnLabel(i);
            String type = meta.getColumnTypeName(i);
            String table = meta.getTableName(i);
            data[0] = column;
            data[1] = type;
            data[2] = table;
            vData.addElement(data);
        }

        return vData;
    }

    public static String tomaGrupo(String usuario,
            HttpServletRequest req) throws IOException {
        String sistema = tomaParametro("dic_sistema", req);
        String sql =
                "select us_grupo  from gentus where us_usuario = '" + usuario.trim()
                + "' and us_cvesis = '" + sistema + "'";
        String gpo = "admin";// valorSqlUni(sql);   //AQUIIII
        return gpo;
    }

    public static String tomaParametro(String nombre, HttpServletRequest req) {
        String parametro = req.getParameter(nombre);
        if (parametro == null) {
            HttpSession session = req.getSession(true);
            if (session == null) {
                return "";
            }
            if (session.getAttribute(nombre) != null) {
                parametro = session.getAttribute(nombre).toString();
            }
        }
        return parametro;
    }

    public static String tomaParametroSesion(String nombre,
            HttpServletRequest req_param) {
        HttpSession session = req_param.getSession(true);
        String parametro = null;
        if (session.getAttribute(nombre) != null) {
            parametro = session.getAttribute(nombre).toString();
        }
        return parametro;
    }

    public static String tomaProp(String s_prop, Properties props) {
        if (props == null) {
            return "";
        } else {
            String res = props.getProperty(s_prop);
            return res;
        }
    }

    public static String tomaValorLinea(String linea, String id, String sep) {
        String res = "";
        if (linea.indexOf(id) >= 0) {
            res = generaValDer(id, linea);
            if (res.indexOf(sep) >= 0) {
                res = generaValIzq(sep, res);
            }
        }
        return res;
    }

    public static Vector uneVectores(Vector v1, Vector v2) {
        for (int i = 0; i < v2.size(); i++) {
            v1.addElement(v2.elementAt(i));
        }

        return v1;
    }

    public static String validaComillas(String fuente) {
        if (fuente == null) {
            return "";
        }
        String salida = fuente;
        String cadenab = "'";
        String cadenar = "''";
        for (int pos = salida.indexOf(cadenab); pos >= 0;) {
            salida = fuente.substring(0, pos) + cadenar;
            salida =
                    salida + fuente.substring(pos + cadenab.length(), fuente.length());
            fuente = salida;
            int tam = fuente.length();
            int pos2 = pos + 2;
            if (pos2 <= tam) {
                pos = fuente.indexOf(cadenab, pos2);
            } else {
                pos = -1;
            }
        }

        return salida;
    }

    public static String validaComillasSeguidas(String sSql) throws IOException {
        String salida = sSql;
        Properties prop = new Properties();
        prop = loadProperties("/kaizen/general.properties");
        String funcionNull = prop.getProperty("funcionNull");
        String cadW = "WHERE";
        if (funcionNull.trim().length() > 0
                && (sSql.toUpperCase().indexOf("SELECT") == 0
                || sSql.toUpperCase().indexOf("DELETE") == 0
                || sSql.toUpperCase().indexOf("UPDATE") == 0)
                && sSql.toUpperCase().lastIndexOf(cadW) > 0) {
            int pos = sSql.toUpperCase().lastIndexOf(cadW);
            String s1 = sSql.substring(0, pos) + cadW;
            String s2 = sSql.substring(pos + cadW.length(), sSql.length());
            s2 = replaceString(s2, "=''", funcionNull);
            s2 = replaceString(s2, "= ''", funcionNull);
            salida = s1 + s2;
        }
        return salida;
    }

    public static String validaJoinFk(String joinFK,
            HttpServletRequest req) throws IOException {
        if (joinFK == null) {
            return joinFK;
        }
        String res_cond = "";
        String tipo_ciifwhere = "ciifwhere=";
        String tipo_ciifwhereOr = "ciifwhereOr=";
        int i_where = joinFK.indexOf(tipo_ciifwhere);
        for (int i_whereOr = joinFK.indexOf(tipo_ciifwhereOr);
                i_where >= 0 || i_whereOr >= 0;
                i_whereOr = joinFK.indexOf(tipo_ciifwhereOr)) {
            String tipo = tipo_ciifwhere;
            if (i_whereOr > i_where) {
                tipo = tipo_ciifwhereOr;
            }
            String condicion = tipo + generaValDerLast(tipo, joinFK);
            joinFK = generaValIzqLast(tipo, joinFK);
            String res_ciif = ciifWhere(condicion, tipo, req);
            if (res_cond.length() > 0 && res_ciif.length() > 0
                    && !res_ciif.trim().toUpperCase().startsWith("UNION")
                    && (res_cond.toUpperCase().indexOf("WHERE") > 0
                    || res_cond.trim().length() > 0)) {
                res_cond = res_cond + " and ";
            }
            res_cond = res_cond + " " + res_ciif;
            i_where = joinFK.indexOf(tipo_ciifwhere);
        }

        res_cond = res_cond.trim();
        if (res_cond.trim().length() > 0) {
            String where = " WHERE ";
            if (joinFK.toUpperCase().indexOf("WHERE") > 0) {
                if (res_cond.toUpperCase().startsWith("AND ")
                        || res_cond.toUpperCase().startsWith("OR ")
                        || res_cond.toUpperCase().startsWith("UNION ")
                        || res_cond.toUpperCase().startsWith("WHERE ")
                        || joinFK.trim().toUpperCase().endsWith(" AND")
                        || joinFK.trim().toUpperCase().endsWith(" OR")
                        || joinFK.trim().toUpperCase().endsWith(" UNION")
                        || joinFK.trim().toUpperCase().endsWith(" WHERE")) {
                    where = " ";
                } else {
                    where = " AND ";
                }
            }
            joinFK = joinFK + where + res_cond;
        }
        return joinFK;
    }

    public static String validaNulo(String texto) {
        if (texto == null) {
            return "";
        } else {
            return texto.trim();
        }
    }

    public static String validaNuloEsp(String texto, String txtDef) {
        if (texto == null) {
            return txtDef;
        } else {
            return texto.trim();
        }
    }

    public static String validaPermisos(String usuario, String tabla,
            String idioma,
            HttpServletRequest req) throws IOException {
        String sistema = tomaParametro("dic_sistema", req);
        String grupo = tomaParametro("dic_grupo", req);
        String permisos = "";
        String sql =
                "select op_cveopc, op_url from gentop where op_cvesis = '" + sistema
                + "'";
        Vector consul = DbAppCache.execQuery(sql);
        String menu = encuentraMenuVector(consul, tabla);
        sql =
                "select pe_permisos from gentpe where pe_cvesis = '" + sistema + "' and pe_cveopc = '"
                + menu + "' and pe_gpousu = '" + grupo + "'";
        permisos = valorSqlUni(sql);
        if (permisos == null) {
            permisos = "";
        }
        return permisos;
    }

    public static String validaPermisosNuevo(HttpServletRequest req) throws IOException {
        String sistema = tomaParametro("dic_sistema", req);
        String grupo = tomaParametro("dic_grupo", req);
        String submenu = tomaParametro("dic_submenu", req);
        String permisos = "";
        String sql =
                "select pe_permisos  from gentop, gentpe  where OP_CVEOPC = PE_CVEOPC  and OP_CVESIS = PE_CVESIS  and PE_CVESIS = '"
                + sistema + "' " + " and PE_GPOUSU = '" + grupo + "' "
                + " and OP_CVEOPC = '" + submenu + "'";
        permisos = valorSqlUni(sql);
        if (permisos == null) {
            permisos = "";
        }
        return permisos;
    }

    public static boolean validaUsuario(String usuario, String password,
            HttpServletRequest req) throws IOException {
        boolean valida = true;
        String sistema = tomaParametro("dic_sistema", req);
        String sql =
                "SELECT us_usuario, us_passwd FROM gentus where us_cvesis = '"
                + sistema + "' and us_usuario = '" + usuario + "' and us_passwd = '"
                + password + "'";
        String ks_usr = valorSqlUni(sql);
        if (ks_usr == null) {
            valida = false;  //aqui, es false
        }
        return valida;
    }

    public static String valorSqlCache(String sql) throws IOException {
        String valSql = null;
        Vector vRecord = DbAppCache.execQuery(sql);
        if (vRecord.size() == 0) {
            return null;
        }
        dbRecord ksrecord = (dbRecord) vRecord.elementAt(0);
        valSql = ksrecord.getField(1);
        if (valSql != null && valSql.trim().length() == 0) {
            valSql = null;
        }
        return valSql;
    }

    public static String valorSqlUni(String sql) throws IOException {
        String valSql = null;
        Vector vRecord = DbAppUnivC.execQuery(sql);
        if (vRecord.size() == 0)// va 0
        {
            return null;
        }
        dbRecord ksrecord = (dbRecord) vRecord.elementAt(0);
        valSql = ksrecord.getField(1);
        if (valSql != null) {
            valSql = valSql.trim();
            if (valSql.length() == 0) {
                valSql = null;
            }
        }
        return valSql;
    }

    public static String valoresXComaSqlUni(String sql) throws IOException {
        String valoresSql = "";
        Vector vRecord = DbAppUnivC.execQuery(sql);
        if (vRecord.size() == 0) {
            return "";
        }
        for (int i = 0; i < vRecord.size(); i++) {
            dbRecord ksrecord = (dbRecord) vRecord.elementAt(i);
            String val = ksrecord.getField(1);
            if (val == null) {
                val = "";
            }
            if (val.length() > 0) {
                if (valoresSql.length() > 0) {
                    valoresSql = valoresSql + ",";
                }
                valoresSql = valoresSql + val;
            }
        }

        return valoresSql;
    }

    public static boolean variableEnSesion(String nombre,
            HttpServletRequest req_param) {
        boolean enSesion = false;
        HttpSession session = req_param.getSession(true);
        if (session.getAttribute(nombre) != null) {
            enSesion = true;
        } else {
            enSesion = false;
        }
        return enSesion;
    }
    public static int DIC_BD_TABLA = 1;
    public static int DIC_BD_CAMPO = 2;
    public static int DIC_BD_TIPOLLAVE = 3;
    public static int DIC_BD_TIPOCAMPO = 4;
    public static int DIC_HTML_TIPOCAMPO = 5;
    public static int DIC_BD_LONGITUD = 6;
    public static int DIC_HTML_ANCHO = 7;
    public static int DIC_SQL_INSERT = 8;
    public static int DIC_SQL_UPDATE = 9;
    public static int DIC_SQL_DELETE = 10;
    public static int DIC_SQL_SELECT = 11;
    public static int DIC_SQL_JOINFK = 12;
    public static int DIC_ETIQUETA = 13;
    public static int DIC_REQUERIDO = 14;
    public static int DIC_BD_FK = 15;
    public static int DIC_SELREP = 16;
    public static int DIC_REP_VISIBLE = 17;
    public static int DIC_DET_REQUERIDO = 18;
    public static int DIC_DET_REP_VISIBLE = 19;
    public static int DIC_VALOR_INICIAL = 20;
    public static int DIC_SQRPARAMETRO = 21;
    public static int DIC_MUESTRA_CAMPO = 22;
    public static int DIC_HTML_ORDEN = 23;
    public static int DIC_VALOR_SECUENCIAL = 24;
    public static int DIC_ENCRIPTADO = 25;
    public static int DIC_MAYUSCULAS = 26;
    public static int DIC_HTML_LINEAS = 27;
    public static int DIC_SQL_DETALLE = 28;
    public static int DIC_CAMP_BUSQUEDA = 29;
    public static int DIC_SQL_BUSQUEDA = 30;
    public static int DIC_CAMPO_INFORMATIVO = 31;
    public static Vector vRequest = null;
}
